Arrays 클래스
✒️ 2025-05-14 20:49 내용 수정
- 배열의 복사, 정렬, 검색 등 배열을 다룰 때 필요한 다양한 메서드가 포함되어 있다.
- 메서드를 사용할 때 Arrays.메서드이름() 으로 함수를 호출할 수 있다.
- 모든 메서드가 static이기 때문에 Math처럼 객체를 생성하지 않아도 사용할 수 있다.
- 배열을 스트림으로 바꿔서 List로 만들 수 있다
| 메서드 | 설명 |
|---|---|
| toString(arrayName) | 배열의 element 출력 |
| deepToString(arrayName) | 전달 받은 배열의 deep contents로 표기된 String을 반환 만약 배열이 다차원 배열이라면, 다차원 배열의 element인 배열과 그 element 배열의 element들까지 반환 |
| sort(int i) 등 | 배열의 element들을 오름차순으로 정렬 |
| sort(array, Comparator) | 배열을 Comparator 인터페이스를 구현한 내용을 기준으로 정렬 |
| copyOf(array, int length) | 배열을 원하는 길이만큼 새 배열에 복사 |
| copyOfRange(char[] original, int start, int end) 등 | 원본 배열의 특정 범위를 새 배열에 복사 |
| boolean equals(int[] a, int[] b) 등 | 두 배열이 같은지 비교 |
| void fill(char[] a, char ch) 등 | 배열 a의 요소에 전달 받은 변수 ch를 채움 |
| int compare(int[] a, int[] b) 등 | 배열 a와 배열 b를 사전식 순서로 비교 |
| asList(T t1, T t2...) | 전달 받은 데이터들로 구성된 배열 생성 |
| stream(int[] arr), stream() | 배열을 스트림으로 변환 |
- fill() 메서드 사용 시 주의점 : 기본 자료형 및 Object들로 만든 배열에도 사용할 수 있는데, 특히 Object 배열에서 사용할 경우 같은 객체가 모든 배열 요소에 복사되어 채워진다.
- 따라서 같은 객체가 중복 호출되기 때문에 fill() 대신 for문으로 배열 요소를 채워야 서로 다른 객체가 저장된다. (10814번 나이순 정렬)
Arrays.toString(배열이름);
- 배열의 elements를 출력해준다.
int[] a = {1, 2, 3, 4};
Arrays.toString(a);
// [1, 2, 3, 4] 가 출력된다
Arrays.sort(배열이름);
- 여기서 배열이름은 참조형 변수로 작동하지 않는다.
- 버블 정렬과 비교하면 클래스의 위력이 실감된다...
int[] a = {1, 3, 2, 4};
Arrays.sort(a);
// a = [1, 2, 3, 4];로 오름차순 정렬한다
Arrays.sort(배열이름, Comparator);
- 배열의 정렬 기준을 Comparator로 지정할 수 있다.
- 11650번 좌표 정렬하기, 11651번 좌표 정렬하기 2에서 사용했다.
- 2차원 배열을 정렬할 때 사용할 수 있다.
- 아래 Comparator에서 결과값이 양수면 두 배열의 위치를 바꾸고, 0이거나 음수면 바꾸지 않는다.
- https://onejunu.tistory.com/53
- https://stackoverflow.com/questions/15452429/java-arrays-sort-2d-array
- https://zara49.tistory.com/149
int[][] array = new int[2][2];
Arrays.sort(array, (a,b) -> {
if (a[0] != b[0]) return a[0] - b[0];
return a[0] - b[0];
});
Arrays.copyOf(복사대상, 복사길이);
int[] a = {1, 2, 3, 4};
int[] newA = Arrays.copyOf(a);